/**
 * File:bc.grid.js
 * Youth is just a unoptimized code!
 * -------------------------------------------------------------------------
 * Created by BigQ on 2016/10/5.
 *--------------------------------------------------------------------------
 * This technical information is confidential information,
 * without my written permission is prohibited for commercial purposes.　
 *--------------------------------------------------------------------------
 */

(function ($) {
    var bcGrid = function (ele, opt) {
        this.gridWrap = this.element = $(ele);
        this.grid = null;
        this.gridHead = null;
        this.gridContent = null;
        this.pager = null;
        this.defaults = {
            varsion: 'version 1.0.0',
            width: 'auto',                          //宽度值
            height: 'auto',                          //宽度值
            csrfVaildate: true,                     //是否 csrf 验证
            csrfName: '_csrf',                      
            csrf: '',
            url: false,                             //ajax url
            data: [],                            //初始化数据
            autoLoadData: true,                  //是否自动载入数据

            usePager: true,                         //是否分页
            page: 1,                                //默认当前页
            pageSize: 20,                           //每页默认的结果数 all全部
            pageSizeOptions: [10, 20, 30, 40, 50],  //可选择设定的每页结果数

            params: [],                           //提交到服务器的参数
            columns: [],                          //数据源
            dataSource: 'server',                     //数据源：本地(local)或(server),本地是将读取p.data。不需要配置，取决于设置了data或是url
            pagaSourceType: 'ajax',                    //分页的方式：本地(local)或(server),选择本地方式时将在客服端分页、排序。

            checkbox: false,                            //是否显示复选框
            serialNum: true,                            //是否显示序号
            noDataText: '当前没有任何数据',             // 没有数据时的提示文字
            dateFormat: 'yyyy-MM-dd hh:mm:ss',              //默认时间显示格式
            wrapCssClass: 'Framework-listTable',            // 外层  类名
            cssClass: 'listTable',                          // 表格  类名
            rows: 'rows',                       //数据源 字段名
            total: 'total',                     //数据源 记录数字段名
            pageParamName: 'page',               //页索引参数名，(提交给服务器)
            pagesizeParamName: 'pagesize',        //页记录数参数名，(提交给服务器)
            sortnameParamName: 'sortname',        //页排序列名(提交给服务器)
            sortorderParamName: 'sortorder',      //页排序方向(提交给服务器)
            pageElement: null,                  //分页容器
            contentType: null,                     //Ajax contentType参数
            checkboxColWidth: 15,                  //复选框列宽度
            onInit: null,                       //初始化完成 事件
            onSuccess: null,                       //成功获取服务器数据的事件
            onCheckClick: null,                       //选择点击数据
            onCheckAllClick: null,                  //选择点击数据（全选/全不选）
            onCheckRow: null,                    //选择事件(复选框)
            onError: null,                         //错误事件
            onReload: null,                    //重新加载事件，可以通过return false来阻止操作
            onRefresh: null,                    //刷新事件，可以通过return false来阻止操作
            onToFirst: null,                     //第一页，可以通过return false来阻止操作
            onToPrev: null,                      //上一页，可以通过return false来阻止操作
            onToNext: null,                      //下一页，可以通过return false来阻止操作
            onToLast: null,                      //最后一页，可以通过return false来阻止操作
            onComplete: null,                          //加载完函数
            onLoadData: null,                       //加载数据前事件
            onLoadedData: null,                  //加载完数据事件
            onEditSave: null  ,                      // lrxin 修改保存的ajax回调函数
            editSaveUrl: null ,                      // lrxin 修改保存的url
            refreshBtnEnable: true,              //刷新按钮
            pageOpt: [] ,

        },
        this.options = $.extend({}, this.defaults, opt);
        this.options.url = $.isEmptyObject(this.options.url) ? window.location.href.split('?')[0] : this.options.url;
    };
    //定义bcGrid的方法
    bcGrid.prototype = {
        render: function () {
            this._init();
            return this;
        },
        //初始化
        _init: function () {
            var g = this, p = this.options;
            //csrf
            if (p.csrfVaildate && $.isEmptyObject(p.csrf)) {
                p.csrf = $("input[name='" + p.csrfName + "']").val();
            }
            if (!g.gridWrap.hasClass(p.wrapCssClass)) {
                g.gridWrap.addClass(p.wrapCssClass);
            }
            //page
            var page = g._getQueryString(p.pageParamName); //从URL中查询

            if (!isNaN(page) && page != '') {
                p.page = page;
            }
            this.grid = $('<table></table>');
            g.grid.addClass(p.cssClass);
            g.gridWrap.html(g.grid);
            g._setHead();
            g._setGridContent();
            
            if (p.autoLoadData) {
                g.loadData(true);
            }
            //回调函数 onInit
            if (p.onInit && $.isFunction(p.onInit) ) {
                p.onInit(g);
            }


        },
        //head  
        _setHead: function () {
            var g = this, p = this.options;
            var $tr = $('<tr>');

            if(p.checkbox){
                $tr.append('<th width="' + p.checkboxColWidth + '"><input class="checkbox" type="checkbox" id="bcgrid_checkbox_head"  checkboxAll="listCheckBoxGroup"/></th>');
            }

            if(p.serialNum){
                $tr.append('<th>序号</th>');
            }
            //标题
            $.each(p.columns, function (index, item) {
                //console.log('666:',item);
                var $th = $('<th>').html( item.display );
                //隐藏列
                if (item.hide) {
                    $th.hide();
                }
                //列宽
                if(item.width){
                    $th.width(item.width);
                }
                //允许编辑
                if(item.allowEdit){
                    var $btn = $('<button>').html('[编辑]')
                                            .attr('id','bcgrid_head_edit_'+index)
                                            .addClass('bcgrid_head_btn_edit');
                    $th.append($btn);
                }


                //
                $tr.append($th);
            });

            this.gridHead = $('<thead>').html($tr);
            g.grid.html(this.gridHead);
        },
        _setGridContent: function () {
            this.gridContent = $('<tbody></tbody>');
            this.grid.append(this.gridContent);
        },
        //加载数据
        loadData: function (reloadPage) {
            var isReloadPage = false;
            if (arguments.length > 0) {
                isReloadPage = reloadPage;
            }

            var g = this, p = this.options;

            var dataParam = [];
            if (p.params) {
                var params = $.isFunction(p.params) ? p.params() : p.params;  //如果参数 是 回调函数 就执行回调函数 ， [{},{},{},{}]
                if (params.length) {
                    $.each(params, function () {
                        dataParam.push({name: this.name, value: this.value}); //why？？？ 重新处理一遍  如果是 [{name:a,value:123},{name:a,value:123},{name:a,value:123}] => [{name:a,value:123},{name:a,value:123},{name:a,value:123}]
                    });
                }
                else if (typeof params == "object") {
                    for (var name in params) {
                        dataParam.push({name: name, value: params[name]});    //如果是对象  {a:111,b:222,c:666} => [{name:a,value:123},{name:a,value:123},{name:a,value:123}]
                    }
                }

            }
            dataParam.push({name: p.pageParamName, value: p.page});             //在参数中 追加数据 当前页码  [....,{name:page,value:5}]
            dataParam.push({name: p.pagesizeParamName, value: p.pageSize});     //在参数中 追加数据 pagesize  [....,{name:page,value:5}]
            if (p.csrfVaildate) {
                dataParam.push({name: p.csrfName, value: p.csrf});
            }

            //lrxin 给ajax请求加上 db相关参数
            var dbParam = [];
            console.log('p.columns',p.columns);
            $.each( p.columns , function( i , v ){
            	dbParam.push(  v.db  ); 
            });
            //console.log( dbParam );
			dataParam.push({name: "db", value: JSON.stringify( dbParam ) }); 
           


            if (p.onLoadData) {
                p.onLoadData();  //回调函数  加载数据事件的回调函数  执行回调函数
            }



            //判断加载data的类型   sever服务器 
            if (p.dataSource == 'server') {
                BC.ajax({
                    url: p.url,
                    showLoading: true,
                    loadingTip: '数据加载中...',
                    data: $.param(dataParam),  // 终于知道为什么 要把 参数都处理成 [{name: "a" ,value: "111"},...]
                    success: function (message, data) {
                        p.data = data;
                        g._displayData();     //显示数据
                        if (isReloadPage) {
                            g._displayPage(); //重新载入页码
                        }
                    },
                    fail:function (message) {
                        g._error(message);
                    },
                    error: function (MLHttpRequest, textStatus, errorThrown) {
                        g._error('数据加载失败！[' + textStatus + ']');
                    },
                    complete: function () {
                        if (p.onLoadedData) {
                            p.onLoadedData(p.data);  //回调函数 加载数据完成
                        }
                    }
                });
            }
            else {

            }
        },
        //重新加载
        reload: function () {
            var res = true;
            if (this.onReload) {
                res = this.onReload(); // 回到函数  如果函数返回false 不重新加载函数
            }
            if (res) {
                this.options.page = 1;
                this.loadData(true);
            }
        },
        //重新加载  方法同 reload
        reloadData: function () {
            var res = true;
            if (this.onReload) {
                res = this.onReload();
            }
            if (res) {
                this.loadData(true);
            }
        },
        //整体刷新
        refresh: function () {
            var res = true;
            if (this.onRefresh) {
                res = this.onRefresh(); //整体刷新的回调函数 false true
            }
            if (res) {
                this._init();
            }
        },
        //错误提示 
        _error: function (message) {
            if (this.options.onError) {
                this.options.onError(message); //错误提示的回调函数  
            }
            else {
                BC.showError(message);
                //alert(message);
            }
        },
        //显示数据  + 绑定事件
        _displayData: function () {
             var g = this;
            if (!$.isEmptyObject(this.options.data)) {
                this._displayListData(this.options.data[this.options.rows]); //显示列表数据
            }
            g._bindEvent();//绑定事件
        },

        
        //显示列表数据  bQ老方法。 上边 lrxin 重写了
        _displayListData: function (data) {
            var g = this, p = this.options;
            g.gridContent.empty(); //清空 tbody 原有内容

            var dataHtml = [];
            if (data.length == 0) {
                //没有数据
                var columnsLen = p.columns.length;
                if (p.checkbox) {
                    columnsLen++;
                }
                if (p.serialNum) {
                    columnsLen++;
                }
                dataHtml.push('<tr id="bcgrid_list_nodata" >');
                dataHtml.push('<td colspan="' + columnsLen + '" style="text-align: center">' + p.noDataText + '</td>');
                dataHtml.push('</tr>');
            }
            else {
                //有数据 
                //行 循环
                $.each(data, function (rowIndex, rowItem) {
                    dataHtml.push('<tr id="bcgrid_list_' + rowIndex + '" data-row-index="'+rowIndex+'">');
                    if (p.checkbox) {
                        dataHtml.push('<td><input class="checkbox" type="checkbox" id="bcgrid_checkbox_list_' + rowIndex + '" data-index="' + rowIndex + '" tag="bcgrid_checkbox" checkboxGroup="listCheckBoxGroup"/></td>');
                    }
                    if (p.serialNum) {
                        var serial = 0;
                        if ((p.pageSize + '').toLowerCase() == 'all') {
                            serial = (rowIndex + 1);
                        }
                        else {
                            serial = (rowIndex + 1) + (p.page - 1) * p.pageSize;
                        }
                        dataHtml.push('<td>' + serial + '</td>');
                    }

                    $.each(p.columns, function (index, item) {
                        var colIndex = index;
                        dataHtml.push(g._renderColumnData(rowIndex, item, rowItem ,colIndex )); // 单元格数据 （ 行号  ，显示 ，当前行数据 , ）
                    });

                    dataHtml.push('</tr>');
                });
            }

            g.gridContent.html(dataHtml.join(''));
            //移除 thead中 权限按钮的 选中状态
            $('input[type="checkbox"]', g.gridHead).removeAttr("checked");
        },
        updateRow: function (rowIndex, rowItem) {
            /*   var g= this,p = this.options;
             var dataHtml=[];
             if (p.checkbox) {
             dataHtml.push('<td><input class="checkbox" type="checkbox" id="bcgrid_checkbox_list_' + rowIndex + '" data-index="' + rowIndex + '" tag="bcgrid_checkbox" checkboxGroup="listCheckBoxGroup"/></td>');
             }
             if(p.serialNum){
             var serial = (rowIndex+1) + (p.page-1)*p.pageSize
             dataHtml.push('<td>'+serial+'</td>');
             }
             $.each(p.columns, function (index, item) {
             dataHtml.push(g._renderColumnData(rowIndex, item, rowItem));
             });
             dataHtml.push('</tr>');
             g.gridContent.html(dataHtml.join(''))*/
        },
        _displayPage: function () {
            var g = this, p = this.options;
            if (!$.isEmptyObject(p.data) && p.usePager && !$.isEmptyObject(p.pageElement)) {
                var pageOpt = {
                    pageSize: p.pageSize,                          //分页尺寸
                    recordCount: p.data[p.total],
                    pageSizeOptions: p.pageSizeOptions,          //范围
                    currentPage: p.page,                             //当前页
                    trunPageEvent: function (page, pageSize) {
                        p.page = page;
                        p.pageSize = pageSize;
                        g.loadData(false, page);
                    }
                };
                pageOpt = $.extend(pageOpt, p.pageOpt);
                this.pager = $(p.pageElement).bcPager(pageOpt);//执行分页
                g._initToolBtn();
            }
        },
        //单元格数据  （行号  列   数据）rowIndex, item, rowItem ,colIndex 
        _renderColumnData: function (index, column, data , colIndex ) {
            var g = this, p = this.options;
            var defaultOpt = {
                display: '数据',    //列 名字
                name: 'name',       //关联 数据名
                type: 'text',       //类型 text文本  data日期    editTextInput
                render: null,       //数据 回调函数
                hide: false,        //是否隐藏
                align: null,        //对其方式 left center right
                allowEdit:false ,   //允许编辑 
                format: p.dateFormat     //格式化  
            };
            var opt = $.extend({}, defaultOpt, column || {});
            var dataRes = ''; 

            //如果 回调函数是字符串  字符串函数 => 函数 
            if (typeof opt.render === "string") {
                eval("opt.render=" + opt.render);
            }
            //如果 回调函数是函数   执行函数   
            if ($.isFunction(opt.render)) {
                dataRes = opt.render(data, index);
            }
            else {
                if(typeof(data[column.name])=="undefined"){ 
                   data[column.name] = ''; 
                }
                //优先处理 render 然后看 type 
                switch (opt.type) {
                    case 'text':
                        dataRes = data[column.name];
                        break;
                    case 'date':
                        dataRes = g._formatDate(data[column.name], opt.format);
                        break;
                    default:
                        dataRes = data[column.name];
                        break;
                }
            }
//console.log('666:' , index , column );
            if(opt.allowEdit){
                dataRes = '<span grid_allowEdit_text="'+column.name+'"  data-index="'+index+'"  data-name="'+column.name+'"  >'+dataRes+'</span> <input style="display:none;" grid_allowEdit_input="'+column.name+'" data-index="'+index+'" data-name="'+column.name+'" value="'+dataRes+'"  />';
            }

            if (opt.hide) {
                dataRes = '<td style="display: none;">' + dataRes + '</td>';
            }
            else {
                if (opt.align) {
                    dataRes = '<td align="' + opt.align + '">' + dataRes + '</td>';
                }
                else {
                    dataRes = '<td>' + dataRes + '</td>';
                }
            }
            return dataRes;
        },
        _formatDate: function (value, format) {
            function getFormat(date, dateformat) {
                if (isNaN(date)) return '';
                var formatOpt = dateformat;
                var o = {
                    "M+": date.getMonth() + 1,
                    "d+": date.getDate(),
                    "h+": date.getHours(),
                    "m+": date.getMinutes(),
                    "s+": date.getSeconds(),
                    "q+": Math.floor((date.getMonth() + 3) / 3),
                    "S+": date.getMilliseconds()
                }
                if (/(y+)/.test(formatOpt)) {
                    formatOpt = formatOpt.replace(RegExp.$1, (date.getFullYear() + "")
                        .substr(4 - RegExp.$1.length));
                }
                for (var k in o) {
                    if (new RegExp("(" + k + ")").test(formatOpt)) {
                        formatOpt = formatOpt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]
                            : ("00" + o[k]).substr(("" + o[k]).length));
                    }
                }
                return formatOpt;
            }

            if (!value) return "";
            // /Date(1328423451489)/
            if (typeof (value) == "string" && /^\/Date/.test(value)) {
                value = value.replace(/^\//, "new ").replace(/\/$/, "");
                eval("value = " + value);
            }
            if (!isNaN(value)) {
                var newDate = new Date();
                newDate.setTime(value * 1000);
                value = newDate;
            }
            if (value instanceof Date) {
                var formatOpt = format || "yyyy-MM-dd hh:mm:ss";
                return getFormat(value, formatOpt);
            }
            else {

                return value.toString();
            }
        },
        _getQueryString: function (name) {
            var result = location.search.match(new RegExp("[\?\&]" + name + "=([^\&]+)", "i"));
            if (result == null || result.length < 1) {
                return "";
            }
            return result[1];
        },
        _initToolBtn: function () {
            var self = this, p = this.options;
            if(p.refreshBtnEnable){
             self.pager.addToolButton({
                 id:'refresh',
                 title:'刷新',
                 cssClass:'refresh_button',
                 click:function(item){
                     self.reload();
                 }
             });
            }
        },
        _bindEvent: function () {
            var g = this, p = this.options;
            //全选
            $(':checkbox', g.gridHead).on('click', function (e) {
                var isChecked = false;
                if ($(this).is(':checked')) {
                    isChecked = true;
                    $("input[tag='bcgrid_checkbox']").attr("checked", true);
                }
                else {
                    isChecked = false;
                    $("input[tag='bcgrid_checkbox']").removeAttr("checked");

                }
                if (p.onCheckAllClick && $.isFunction(p.onCheckAllClick)) {
                    p.onCheckAllClick(isChecked); //回调函数  是否全选的回调函数
                }
            });

            if (p.onCheckClick && $.isFunction(p.onCheckClick)) {
                $(':checkbox[tag="bcgrid_checkbox"]', g.gridContent).on('click', function () {
                    var isChecked = false;
                    if ($(this).is(':checked')) {
                        isChecked = true;
                    }
                    var rowIndex = parseInt($(this).data('index'));
                    p.onCheckClick(rowIndex, isChecked, p.data[p.rows][rowIndex]);
                });
            }
            //绑定 thead 中 修改相关代码
            g._bindEvent_edit();

            if (p.onComplete) {
                p.onComplete();
            }
            //niceScroll
            $(".niceScroll").getNiceScroll().resize();
        },
        // lrxin edit 
        _bindEvent_edit:function(){
            var g = this, p = this.options;

            //
            $('[grid_allowedit_input]', g.gridContent ).on('dblclick',function(e){
                 e.stopPropagation();//阻止子元素触发父元素的事件的方法
            }).on('change',function(e){
                e.stopPropagation();//阻止子元素触发父元素的事件的方法

                var $input = $(this);
                var colIndex = $input.closest('td').index();
                var rowIndex = $input.closest('tr').data('rowIndex');
                var $btn = $('th:eq('+colIndex+')' , g.gridHead).find('.bcgrid_head_btn_edit');

                //修改按钮    
                $btn.html('[保存]').attr('btnName','save');
                //数据修改了
                $input.addClass('bcgrid_input_changed');



                //console.log( colIndex  , rowIndex);

            });
            //
            $('.bcgrid_head_btn_edit', g.gridHead).on('click', function (e) {
                var $btn = $(this);
                var colIndex = $btn.closest('th').index();
                var $tr = $('tr', g.gridContent);
                var $td = $( 'td:eq('+colIndex+')' , $tr);



                var btnName = $(this).attr('btnName') ;
                if( btnName == 'save' ){
                    _save();
                }else if( btnName == 'cancel' ){
                    _cancel();
                }else{
                    _edit();
                }


                function _btnNameEdit(){
                    $btn.html('[编辑]').attr('btnName','edit');//
                }
                function _btnNameCancel(){
                    $btn.html('[取消]').attr('btnName','cancel');//
                }
                function _btnNameSave(){
                    $btn.html('[保存]').attr('btnName','save');//
                }

                    function _edit(){
                       $('[grid_allowedit_text]', $td ).hide()  ;
                       $('[grid_allowedit_input]', $td ).show()  ;
                       _btnNameCancel();
                    }
                    function _cancel(){
                       $('[grid_allowedit_text]', $td ).show()  ;
                       $('[grid_allowedit_input]', $td ).hide()  ;
                       _btnNameEdit()
                    }
                    function _save(){
                        _btnNameEdit();
                        var colIndex = $btn.closest('th').index();
                        var data  = [];

                       $('tr', g.gridContent).each(function (i,v) {
                        //console.log( i,v );
                            var $tr = $(this);
                            var $td = $(this).children().eq( colIndex );
                            //var $text = $td.find('[grid_allowedit_text]').show();
                            var $input  = $td.find('[grid_allowedit_input]');
                            var row = {};
                            if( $input.hasClass('bcgrid_input_changed') ){
                                row.name = $input.data('name');
                                row.value = $input.val();
                                //row.rowData = p.data[p.rows][$tr.data('rowIndex')];
                                row.rowData = g.getRowData( $tr.data('rowIndex') );
                                data.push(row);
                            }
                        });

                        //console.log(data);

                        //如果 回调函数是字符串  字符串函数 => 函数 
                        if (typeof p.onEditSave === "string") {
                            eval("p.onEditSave=" + p.onEditSave);
                        }
                        //如果 回调函数是函数   执行函数   
                        if ($.isFunction(p.onEditSave)) {
                            p.onEditSave(data , callback_success );
                        }else{
                            
                            onEditSave(data , callback_success );
                        }
                        //
                        function callback_success(message){
                            if( message != ''){
                                BC.tipSuccess(message);
                            }
                             
                            var $td = $('tr', g.gridContent).find('td:eq('+colIndex+')');
                            $td.each(function(){
                                var $td = $(this);
                                //var $text = $td.find('[grid_allowedit_text]').show().html();
                                //var $input  = $td.find('[grid_allowedit_input]').hide().val();
                                $td.find('[grid_allowedit_text]').show().text(  $td.find('[grid_allowEdit_input]').hide().val()  );
                            });

                            
                            
                        }
                        //默认的回调函数
                        function onEditSave(data, callback_success ){
                            console.log('default onEditSave');
                            var dataParem = [];
                            $.each(data,function( i , v ){
                                var row = {};
                                row.name = v.name + '['+v.rowData.id+']' ;
                                row.value =  v.value;
                                dataParem.push(row);
                                //data.push( {"name":"AAAA[1]","value":'1111'});
                            });
                            BC.ajax({
                                url: p.editSaveUrl ,
                                showLoading: true,
                                loadingTip: '数据提交中...',
                                data: $.param(dataParem) ,  // 终于知道为什么 要把 参数都处理成 [{name: "a" ,value: "111"},...]
                                success: function (message, data) {
                                    if( $.isFunction( callback_success ) ){
                                        callback_success(message);
                                    }
                                },
                                fail:function (message) {
                                    g._error(message);
                                },
                                error: function (MLHttpRequest, textStatus, errorThrown) {
                                    g._error('数据保存失败！[' + textStatus + ']');
                                },
                                complete: function () {
                                    //if (p.onLoadedData) {
                                    //   p.onLoadedData(p.data);  //回调函数 加载数据完成
                                    //}
                                }
                            });
                        }
                    }
            });


        },
        getPage: function () {
            return this.options.page;
        },
        getCurrentPage: function () {
            return this.options.page;
        },
        get: function (name) {
            return this.options[name];
        },
        set: function (opt) {
            this.options = $.extend(this.options, opt);
        },
        getData: function () {
            return this.options.data[this.options.rows]
        },
        getRowData:function (rowindex) {
            return this.options.data[this.options.rows][rowindex];
        },
        getTotal: function () {
            return this.options.data[this.options.total];
        },
        deleteRow: function (rowIndex) {
            var g = this, p = this.options;
            $('tr[id="bcgrid_list_' + rowIndex + '"]', g.gridContent).remove();
            p.data[p.total] = parseInt(p.data[p.total]) - 1;
            g._displayPage();
        },
        deleteRows: function (rowIndexArr) {
            var g = this, p = this.options;
            $.each(rowIndexArr, function () {
                $('tr[id="bcgrid_list_' + this + '"]', g.gridContent).remove();
            });
            p.data[p.total] = parseInt(p.data[p.total]) - rowIndexArr.length;
            g._displayPage();

        },
        //??? 获取 
        getCheckedRows: function () {
            var rows = [];
            var g = this, p = this.options;
            console.log(p);
            if (p.checkbox) {
                $('input[tag="bcgrid_checkbox"]', g.gridContent).each(function () {
                    if ($(this).is(':checked')) {
                        rows.push(p.data[p.rows][parseInt($(this).data('index'))]);
                    }
                });
            }
            return rows;
        },
        getCheckedRowsIndex: function () {
            var rows = [];
            var g = this, p = this.options;
            if (p.checkbox) {
                $('input[tag="bcgrid_checkbox"]', g.gridContent).each(function () {
                    if ($(this).is(':checked')) {
                        rows.push(parseInt($(this).data('index')));
                    }
                });
            }
            return rows;
        }


    };
    /**
     * BC表格
     * @param options
     * @returns {*}
     */
    $.fn.bcGrid = function (options) {
        var bcGridPlg = new bcGrid(this, options);
        return bcGridPlg.render();
    };

})(jQuery);
